import router from '@/router'
import { getToken } from '@/utils/auth'
import store from './store'

// 导航守卫
router.beforeEach(async(to, from, next) => {
  const token = getToken()
  const whiteList = ['/login', '/404']
  //   有token去登录页
  if (token && to.path === '/login') {
    next('/')
  }
  //  有token不去登录页
  if (token && to.path !== '/login') {
    // 当已经获取到用户数据时，不需要重新发送请求
    if (!store.state.user.userInfo.userId) {
      await store.dispatch('user/getUserInfo')

      // 调用路由的筛选
      const routes = await store.dispatch('permission/filterRoute', store.state.user.userInfo.roles.menus)
      // 页面刷新进入404页面原因：刷新后浏览器优先去找静态路由，而动态路由还没添加，所以导致触发404页面
      // 为了不让页面刷新就进入404，可以把404页面添加到动态路由加载好之后，但由于没有了默认的404页面后会导致页面白屏
      router.addRoutes(routes, { path: '*', redirect: '/404', hidden: true })
      // 静态路由没有404后会导致白屏，解决方式：这时候只需要在添加动态路由后再跳转一次原页面就能解决；即先跳到白屏再跳转回来
      next(to.path)
      // 因为下面还有一个next，直接运行下去会导致报错，所以需要return
      return
    }
    next()
  }
  //   无token在白名单
  if (!token && whiteList.includes(to.path)) {
    next()
  }
  // 无token不在白名单
  if (!token && !whiteList.includes(to.path)) {
    next('/login')
  }

//   if (token) {
  //   有token去登录页
//     if (to.path === '/login') {
//       next('/')
//     } else {
  //  有token不去登录页
//       next()
//     }
//   } else {
  //   无token在白名单
//     if (whiteList.includes(to.path)) {
//     // if (whiteList.indexOf(to.path) !== -1) {
//       next()
//     } else {
  // 无token不在白名单
//       next('/login')
//     }
//   }
})
